﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class BasePublic
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
//1.公有继承；
class Son1 :public BasePublic
{
public:
	void func()
	{
		//2.基类中私有的属性，不可继承；
		//cout << m_C << endl;
		//3.基类中公有的属性，可继承，还是public；
		cout << m_A << endl;
		//4.基类中保护的属性，可继承，还是protected，类外不可访问；
		cout << m_B << endl;
	}
};
//5.保护继承；
class BaseProtected
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
class Son2 :protected BaseProtected
{
public:
	void func()
	{
		//2.基类中私有的属性，不可继承；
		//cout << m_C << endl;
		//3.基类中公有的属性，可继承，还是protected，类外不可访问；
		cout << m_A << endl;
		//4.基类中保护的属性，可继承，还是protected，类外不可访问；
		cout << m_B << endl;
	}
};
//7.私有继承；
class BasePrivate
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};
class Son3 :private BasePrivate
{
public:
	void func()
	{
		//2.基类中私有的属性，不可继承；
		//cout << m_C << endl;
		//3.基类中公有的属性，可继承，还是private；
		cout << m_A << endl;
		//4.基类中保护的属性，可继承，还是private；
		cout << m_B << endl;
	}
};
class GrandSon :public Son3
{
public:
	void myFunc()
	{
		//8.孙子类中，访问不到m_A，因为在Son3中m_A已经是私有属性；
		//cout << m_A << endl;
	}
};
void myFunc()
{
	Son1 s1;
	s1.m_A;
	//s1.m_B;

	Son2 s2;
	//6.不能访问；
	//s2.m_A;
}

//main286：继承方式
int main286()
{

	system("pause");
	return EXIT_SUCCESS;
}